package modelo.Orientacion;

import java.util.ArrayList;

public class DireccionCombinada extends Direccion{

    private ArrayList<Direccion> direcciones;

    public DireccionCombinada(ArrayList<Direccion> direcciones){
        super();
        this.direcciones = direcciones;
    }

    @Override
    public Posicion devolverSiguientePosicion(Posicion pos) {
        Posicion posFinal = pos;
        Direccion dir;
        int i;
        for(i = 0; i < direcciones.size(); i++){
            dir = direcciones.get(i);
            posFinal = dir.devolverSiguientePosicion(posFinal);
        }
        return posFinal;
    }

    @Override
    public boolean seLlegaConEstaDireccion(Posicion desde, Posicion hasta) {
        Direccion dir;
        int i;
        for(i = 0; i < direcciones.size(); i++){
            dir = direcciones.get(i);
            if (!dir.seLlegaConEstaDireccion(desde, hasta)) return false;
        }
        return true;
    }

    @Override
    public Direccion devolverDireccionContraria() {
        ArrayList<Direccion> listaDir = new ArrayList<Direccion>();
        Direccion dir, dirOpuesta;
        int i;
        for(i = 0; i < direcciones.size(); i++){
            dir = direcciones.get(i);
            dirOpuesta = dir.devolverDireccionContraria();
            listaDir.add(dirOpuesta);
        }
        return new DireccionCombinada(listaDir);
    }

    @Override
    public int devolverElAnguloDeLaDireccion() {
        int angulo = 0;
        Direccion dir;
        boolean vaHaciaArriba = false;
        int i;
        for(i = 0; i < direcciones.size(); i++){
            dir = direcciones.get(i);
            if(dir.devolverElAnguloDeLaDireccion() == 0) vaHaciaArriba = true;
            angulo = angulo + dir.devolverElAnguloDeLaDireccion();
        }
        angulo = angulo/i;
        if((angulo == 135)&& vaHaciaArriba) angulo = 315;
        return angulo;
    }

}
